import { AdditionalInput } from 'vite-plugin-web-extension-support-inject';
import pkg from '../package.json';

const manifest: Partial<chrome.runtime.ManifestV3> = {
    action: {
        //图标
        default_icon: {
            16: 'icons/favicon.ico',
            32: 'icons/favicon.ico',
            64: 'icons/favicon.ico',
        },
        //插件打开弹窗展示页面
        default_popup: 'src/entries/popup/index.html', //弹窗页面
    },
    //会一直常驻的后台JS或后台页面
    background: {
        service_worker: 'src/entries/background/main.ts', //后台脚本
    },
    //需要直接注入页面的JS
    content_scripts: [
        {
            js: ['src/entries/contentScript/main.ts'], //内容脚本
            //匹配路径  <all_urls> 表示匹配所有路径
            matches: ['<all_urls>'],
            // run_at: 'document_start',
        },
    ],
    //包含一个或多个匹配模式，可提供对一个或多个主机的访问权限
    host_permissions: ['<all_urls>'],
    //图标
    icons: {
        16: 'icons/favicon.ico',
        32: 'icons/favicon.ico',
        64: 'icons/favicon.ico',
        128: 'icons/favicon.ico',
    },
    // Chrome40以前的插件配置页写法
    //"options_page": "options.html",
    // Chrome40以后的插件配置页写法，如果2个都写，新版Chrome只认后面这一个
    options_ui: {
        page: 'src/entries/options/index.html',
        open_in_tab: true,
    },
    // web_accessible_resources: [
    //     {
    //       resources: ['src/entries/contentScript/content.ts'],
    //       matches: [ '*://*/*' ],
    //     },
    // ],
    //权限
    //storage	扩展程序可以访问chrome.storage API。
//  tabs 扩展程序可以访问Tab包括chrome.tabs和chrome.windows在内的多个API使用的对象的特权字段。
// 在许多情况下，您的扩展程序无需声明"tabs"使用这些API的权限
//     unlimitedStorage	提供无限的配额来存储HTML5客户端数据，例如数据库和本地存储文件。
// 没有此许可，扩展程序或应用程序仅限于5 MB本地存储。
    permissions: [ 'storage', 'unlimitedStorage','tabs'],
    // chrome_url_overrides:
    //     {
    //         // 覆盖浏览器默认的新标签页
    //         newtab: "src/entries/windows/index.html"
    //     },
};

export function getManifest(): chrome.runtime.ManifestV3 {
    return {
        author: pkg.author,
        description: pkg.description,
        name: pkg.displayName ?? pkg.name,
        version: pkg.version,
        manifest_version: 3,
        ...manifest,
    };
}
//在向vite配置注入脚本文件
export function additionalInputs() : { [key: string]: AdditionalInput[] } {
    return {
        scripts: [
            {
                fileName: 'src/entries/contentScript/content.ts',
                webAccessible: {
                    matches: ["<all_urls>"],
                    isInject: true,
                },
            }
        ],
        html: [
            {
                fileName: 'src/entries/windows/index.html',
                webAccessible: true,
            }
        ],
    };
}
